<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数基础知识</title>
</head>
<body>
    
</body>
</html>
<script>
    //函数也是对象
    // let hd = new Function("title","console.log(title)");
    // hd('后盾人');
    //标准语法是使用函数声明来定义函数
    //
    // function hd(num){
    //     return ++num;
    // }
    // console.log(hd(3));

    //对象字面量属性函数简写
    // let user = {
    //     name:null,
    //     getName:function(name){
    //         return this.name;
    //     },
    //     //简写形式
    //     setName(value){
    //         this.name= value;
    //     }
    // }
    // //给属性设置值
    // user.setName('后盾人');
    // console.log(user.getName('hdcms'))

    //全局声明的函数会压入window
    // function screenX(){
    //     return "后盾人";
    // }

    // //全局函数
    // console.log(window.screenX);

    //使用let/const 的时候不会压入window
    // let hd = function(){
    //     console.log('后盾人')
    // }
    // hd();

    //匿名函数
    // let hd = function(num){
    //     return ++num;
    // }
    // console.log(hd instanceof Object);
    // let cms = hd;
    // console.log(cms(3));

    //标准声明的函数会在解析的时候放在代码树的最顶端
    //也就是会会进行函数提升
//    console.log(hd(5));
//     function hd(num){
//         return ++num;
//     }

    //标准声明优先级高于赋值声明
    // function hd(num){
    //     return ++num;
    // }


    // var hd = function(){
    //     return 'hd';
    // }
    // console.log(hd(3));

    // function sum(...args){
    //     return args.reduce((a,b) => a+b);
    // }

    // console.log(sum(1,2,3));


    //立即执行
    //定义私有作用域
    // "use strict";
    // (function(){
    //     var web = 'houdunren';
    // })();
    // console.log(web)

    //使用let/const 有块状作用于，所以也可以声明私有作用域
    // {
    //     var web = 'houdunren';
    // }
    // console.log(web);


    //函数提升
    // console.log(hd());
    // function hd(){
    //     return '后盾人';
    // }

    // console.log(hd());
    // //变量函数定义不会被提升
    // var hd = function(){
    //     return 'aaa';
    // }







    

</script>